package String类oj.第一次出现的字符;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-06-20
 * Time: 14:05
 */
//1.第一个只出现一次的字符
class Solution {
    public static int firstUniqChar(String s) {
        int[] count = new int[26];//这个数组拿来计数：字符出现的次数
        for(int i = 0; i < s.length(); i++) {
            //从字符串中拿出字符：
            char ch = s.charAt(i);//length
            //放在计数的数组中
            count[ch - 'a'] ++;
        }
        //计数完重新遍历一遍字符串，找到它的第一个不重复的字符
        for(int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if(count[ch - 'a'] == 1) {
                return i;
            }
        }
        return -1;
    }
}
public class Test {
    public static void main(String[] args) {
        int ret = Solution.firstUniqChar("loveleetcode");
        System.out.println(ret);
    }
}

/*
这段代码是为了找出一个字符串中第一个只出现一次的字符。

初始化计数数组：首先，代码创建了一个大小为26的整数数组count，用于记录字符串中每个小写字母出现的次数。因为英文字母有26个，所以数组大小是26。
统计字符出现次数：接着，代码遍历输入字符串s，对每个字符进行计数。字符的计数位置是通过将字符转换为0-25之间的索引来确定的（通过ch - 'a'）。例如，字符'a'对应索引0，字符'b'对应索引1，以此类推。
寻找第一个只出现一次的字符：完成计数后，代码再次遍历字符串s。这次遍历的目的是找到第一个在count数组中计数为1的字符，即只出现一次的字符。一旦找到这样的字符，就返回它在字符串中的位置（索引）。
没有只出现一次的字符：如果字符串中没有只出现一次的字符，函数将返回-1。

简而言之，这段代码通过两次遍历字符串：第一次统计字符出现次数，第二次找到第一个只出现一次的字符。
 */